#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
main.py - 命令行文本计数统计工具

支持功能：
- -c : 统计字符数
- -w : 统计单词数
- -s : 统计句子数
- -l : 统计行数（扩展功能）
- -e : 统计空行数（扩展功能）
- -cm : 统计注释行数（扩展功能，支持 # 和 // 注释）

用法：
    python main.py -c textexample.txt     # 统计字符数
    python main.py -w textexample.txt     # 统计单词数
    python main.py -s textexample.txt     # 统计句子数
    python main.py -l textexample.txt     # 统计总行数
    python main.py -e textexample.txt     # 统计空行数
    python main.py -cm textexample.txt    # 统计注释行数
"""

import sys
import os
import re

def count_characters(text):
    """统计字符数（包括空格和换行符）"""
    return len(text)

def count_words(text):
    """统计单词数（以空格、换行、标点分隔）"""
    # 使用正则表达式匹配单词（字母数字组合）
    words = re.findall(r'[a-zA-Z0-9]+', text)
    return len(words)

def count_sentences(text):
    """统计句子数（以 . ! ? 结尾）"""
    sentences = re.split(r'[.!?]+', text)
    # 过滤掉空字符串
    sentences = [s.strip() for s in sentences if s.strip()]
    return len(sentences)

def count_lines(text):
    """统计总行数"""
    return len(text.splitlines())

def count_empty_lines(text):
    """统计空行数"""
    lines = text.splitlines()
    empty_lines = sum(1 for line in lines if not line.strip())
    return empty_lines

def count_comment_lines(text, comment_chars=['#', '//']):
    """统计注释行数（支持多种注释符号）"""
    lines = text.splitlines()
    comment_lines = 0
    for line in lines:
        stripped = line.strip()
        if stripped and any(stripped.startswith(char) for char in comment_chars):
            comment_lines += 1
    return comment_lines

def main():
    """主函数：解析命令行参数并执行相应统计"""
    if len(sys.argv) < 3:
        print("用法: python main.py [参数] [文件名]")
        print("支持的参数:")
        print("  -c : 统计字符数")
        print("  -w : 统计单词数")
        print("  -s : 统计句子数")
        print("  -l : 统计总行数")
        print("  -e : 统计空行数")
        print("  -cm : 统计注释行数")
        sys.exit(1)

    option = sys.argv[1]
    filename = sys.argv[2]

    # 检查文件是否存在
    if not os.path.exists(filename):
        print(f"错误: 文件 '{filename}' 不存在。")
        sys.exit(1)

    # 读取文件内容
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            content = f.read()
    except Exception as e:
        print(f"读取文件时出错: {e}")
        sys.exit(1)

    # 根据选项执行统计
    if option == '-c':
        result = count_characters(content)
        print(f"字符数: {result}")
    elif option == '-w':
        result = count_words(content)
        print(f"单词数: {result}")
    elif option == '-s':
        result = count_sentences(content)
        print(f"句子数: {result}")
    elif option == '-l':
        result = count_lines(content)
        print(f"总行数: {result}")
    elif option == '-e':
        result = count_empty_lines(content)
        print(f"空行数: {result}")
    elif option == '-cm':
        result = count_comment_lines(content)
        print(f"注释行数: {result}")
    else:
        print(f"未知参数: {option}")
        print("支持的参数: -c, -w, -s, -l, -e, -cm")
        sys.exit(1)

if __name__ == "__main__":
    main()